package JDBC;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * Statement的基本用法，测试执行sql语句，以及sql注入问题
 */
public class demo2 {
    public static void main(String[] args) {
        Connection conn= null;
        Statement stmt = null;
        try {
            //加载类驱动
            Class.forName("com.mysql.jdbc.Driver");
            //建立链接(连接对象内部其实包含了socket对象，是一个远程连接，比较耗时！这是Connection对象管理的一个要点)
            //真正开发中.为了提高效率，都会使用连接池来管理连接对象
            conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/zz?characterEncoding=UTF-8","root","123456");
           //Statement接口执行静态sql语句并返回它所生成结果的对象  实际开发并不使用
           stmt = conn.createStatement();
//            String sql = "INSERT INTO user (userName,age) VALUES ('王五',2)";
//            stmt.execute(sql);//运行语句

            //测试sql注入
            String id = "5 or 1=1";//加入了1=1这种永远成立的代码，会删除整个数据，恶意注入
            String sql = "delete from user where id=" + id;
            stmt.execute(sql);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            try {
                if(stmt!=null){
                    stmt.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                if(conn!=null){
                    conn.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}
